Completed
Push — master ( f480bf...21d5d4 )
by Patrick
03:35
created

$.fn.jsonUI   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
nc 3
nop 1
dl 0
loc 13
rs 9.4285
c 0
b 0
f 0
1
(function ( $ ) {
2
    $.fn.jsonUI = function(opts) {
3
        var settings = $.extend($.fn.jsonUI.defaults, opts);
4
5
        if(settings.obj !== undefined)
6
        {
7
            renderUIFromObj(settings.obj, this);
8
        }
9
        else if(settings.json !== undefined)
10
        {
11
            renderUIFromJSON(settings.json, this);
12
        }
13
        return this;
14
    };
15
16
    $.fn.jsonUI.defaults = {
17
    };
18
19
    function renderUIFromJSON(json, rootObj) {
20
        var object = JSON.parse(json);
21
        renderUIFromObj(object, rootObj);
22
    }
23
24
    function renderUIFromObj(object, rootObj) {
25
        switch(object.type)
26
        {
27
            case "Div":
28
                renderDiv(object, rootObj);
29
                break;
30
            case "FormGroup":
31
                renderFormGroup(object, rootObj);
32
                break;
33
            case "Label":
34
                renderLabel(object, rootObj);
35
                break;
36
            case "Wizard":
37
                renderWizard(object, rootObj);
38
                break;
39
            default:
40
                console.log(object);
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
41
                break;
42
        }
43
    }
44
45
    function renderDiv(divObj, rootObj, extraClass)
46
    {
47
        if(extraClass === undefined)
48
        {
49
            extraClass = '';
50
        }
51
        if(divObj.size !== undefined)
52
        {
53
            extraClass+=' col-'+divObj.size;
54
        }
55
        var elem = $(rootObj);
56
        var div = $('<div class="'+extraClass+'">');
57
        if(divObj.content !== undefined)
58
        {
59
            for(var i = 0; i < divObj.content.length; i++)
60
            {
61
                 renderUIFromObj(divObj.content[i], div);
62
            }
63
        }
64
        elem.append(div);
65
    }
66
67
    function renderLabel(labelObj, rootObj)
68
    {
69
        var className = 'control-label';
70
        if(labelObj.size !== undefined)
71
        {
72
            className += ' col-'+labelObj.size;
73
        }
74
        var elem = $(rootObj);
75
        var label = $('<label class="'+className+'">'+labelObj.text+'</label>');
76
        elem.append(label);
77
    }
78
79
    function renderWizard(wizardObj, rootObj) {
80
        var elem = $(rootObj);
81
        var nav = $('<ul class="nav nav-tabs" role="tablist">');
82
        var content = $('<div class="tab-content">');
83
        for(var i = 0; i < wizardObj.pages.length; i++)
84
        {
85
            var id;
86
            if(wizardObj.pages[i].id === undefined)
87
            {
88
                id = 'tab'+i;
89
            }
90
            else
91
            {
92
                id = wizardObj.pages[i].id;
93
            }
94
            nav.append('<li class="nav-item"><a href="#'+id+'" class="nav-link">'+wizardObj.pages[i].title+'</a></li>');
95
            if(wizardObj.pages[i].content !== undefined)
96
            {
97
                var pane = $('<div role="tabpanel" class="tab-pane" id="'+id+'">');
98
                for(var j = 0; j < wizardObj.pages[i].content.length; j++)
99
                {
100
                     renderUIFromObj(wizardObj.pages[i].content[j], pane);
101
                }
102
                content.append(pane);
103
            }
104
        }
105
        elem.append(nav).append(content);
106
        elem.on('click', 'li a', wizardTabClicked);
107
    }
108
109
    function renderFormGroup(formGroupObj, rootObj)
110
    {
111
        renderDiv(formGroupObj, rootObj, 'form-group');
112
    }
113
114
    function wizardTabClicked(e) {
115
        e.preventDefault();
116
        $(this).tab('show');
117
    }
118
}( jQuery ));
119